import vnode from "./vnode";

// 手写一个简单版 h 函数
// 接受参数固定为 3 个 参数
// 形式 1：h( sel, {}, h())
// 形式 2：h( sel, {}, [] )
// 形式 3：h( sel, {}, '' )

export default function (sel, data, c) {
  // 检查参数的数量
  if (arguments.length != 3) {
    throw new Error("对不起，h函数必须接入参数3个,这个简易版 h 函数");
  }
  // 形式 1 c : ''
  if (typeof c == "string" || typeof c == "number") {
    return vnode(sel, data, undefined, undefined, c, undefined);
  } else if (Array.isArray(c)) {
    // 形式 2 c : []
    let children = [];
    for (let i = 0; i < c.length; i++) {
      if (typeof c[i] == "object" && c.hasOwnProperty("sel")) {
        throw new Error("children 选项中包含非 h() 函数！！！");
      }
      children.push(c[i]);
    }
    return vnode(sel, data, children, undefined, undefined, undefined);
  } else if (typeof c == "object" && c.hasOwnProperty("sel")) {
    // 形式 3 c : h()
    let chilren = [c]
    return vnode(sel, data, chilren, undefined, undefined, undefined)
  }
}
